/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package srac.controleeventos.cih;

import java.util.ArrayList;
import java.util.List;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.util.GenericForwardComposer;
import org.zkoss.zul.*;
import srac.controleeventos.cci.CtrlEvento;
import srac.controleeventos.cdp.Evento;
import srac.controleeventos.cdp.Participante;
import util.utilitarioExceptions.SracException;

/**
 *
 * @author rcosta
 */
public class PagEventosConfirmarPresenca extends GenericForwardComposer {

    private CtrlEvento ctrl = CtrlEvento.getInstance();
    private Window winConfirmarPresenca;
    private Checkbox checkBox;
    private Combobox comboEventos;
    private Listbox listParticipantes;
    private Div boxInformacao;
    private Label msg;
    
    private List<Participante> participantes;

    @Override
    public void doAfterCompose(Component comp) throws Exception {
        super.doAfterCompose(comp);
        ctrl.setPagEventoConfirmarPresenca(this);
        List<Evento> eventos = ctrl.obterEvento();
        if (eventos != null) {

            ListModelList<Evento> list = new ListModelList<Evento>(eventos, true);
            comboEventos.setModel(list);

        }
    }

    public void onCreate$winConfirmarPresenca(Event event) {
        //if feito para verificar se existe algum usuario logado, se nao existir eh redirecionado para o login
        if (Executions.getCurrent().getSession().getAttribute("usuario") == null) {
            Executions.sendRedirect("/");
            winConfirmarPresenca.detach();
        }
    }
    
    // Através de um combobox de eventos, recupera-se uma lista de participantes do mesmo e as exibe na tela
    public void onSelect$comboEventos(Event event) throws SracException, Exception {
        /* Limpa a lista de participantes */
        listParticipantes.getItems().clear();
        
        /* Preenche a lista de participantes */
        Evento e = (Evento) comboEventos.getSelectedItem().getValue(); 
        if (e!=null) {
            participantes = ctrl.obterParticipanteEvento(e);
            if (participantes != null) {
                for (int i = 0; i < participantes.size(); i++) {
                    Participante p = (Participante) participantes.get(i);
                    Listitem linha = new Listitem("", p);
                       
                    linha.appendChild(new Listcell(p.getNome()));
                    linha.appendChild(new Listcell(p.getEmail()));
                    if(p.getPresente())
                    {
                        linha.appendChild(new Listcell("SIM"));
                    }
                    else
                    {
                        linha.appendChild(new Listcell("NÃO"));
                    }
                    linha.setParent(listParticipantes);
                }
            }
            else {
                setMensagemAviso("info", "Não há participantes nesse evento");
            }
        }
        else {
            setMensagemAviso("info", "Não há eventos cadastrados");
        }
    }
    
    //Atualiza uma lista de participantes
    public void refreshParticipante(List<Participante> part) {
        for (Participante p : part) {
            for (int i = 0; i < listParticipantes.getItemCount(); i++) {
                if (listParticipantes.getItemAtIndex(i).getValue() == p) {
                    listParticipantes.getItemAtIndex(i).getChildren().clear();
                    listParticipantes.getItemAtIndex(i).appendChild(new Listcell(""));
                    listParticipantes.getItemAtIndex(i).appendChild(new Listcell(p.getNome()));
                    listParticipantes.getItemAtIndex(i).appendChild(new Listcell(p.getEmail()));
                    if(p.getPresente())
                    {
                        listParticipantes.getItemAtIndex(i).appendChild(new Listcell("SIM"));
                    }
                    else
                    {
                        listParticipantes.getItemAtIndex(i).appendChild(new Listcell("NÃO"));
                    }
                    break;
                }
            }
        }
    }
    
    
    public void onClick$emitirCertificado(Event event){
        participantes = getSelecionadosList();
        if(!participantes.isEmpty())
        {
            ctrl.emitirCertificado(participantes);  
        }
        else
        {
            setMensagemAviso("info", "Nenhum Participante foi selecionado!"); 
        }
    }
    
    public void onClick$confirmarPresenca(Event event){
        alterarPresenca(true);
    }
    
    public void onClick$removerPresenca(Event event){
        alterarPresenca(false);
    }
    
    public void alterarPresenca(boolean b)
    {
        participantes = getSelecionadosList();
        if(participantes.isEmpty()) //Verifica se existem atividade com status de registrada
        {
           setMensagemAviso("info", "Nenhum Participante foi selecionado!"); 
        }
        else{ 
            ctrl.aterarPresenca(participantes,b);
            refreshParticipante(participantes);
        }
    }
    
    public void setMensagemAviso(String tipo, String mensagem) {
        boxInformacao.setClass(tipo);
        boxInformacao.setVisible(true);
        msg.setValue(mensagem);
    }

    public void onClick$boxInformacao(Event event) {
        boxInformacao.setVisible(false);
    }
    
    public ArrayList getSelecionadosList() { //Pega as atividades selecionadas
        ArrayList<Listitem> l = new ArrayList<Listitem> (listParticipantes.getSelectedItems());
        ArrayList<Participante> part = new ArrayList<Participante>();
        for (Listitem item : l) {
            part.add((Participante) item.getValue());
            
        }
        return part;
    }
    
}

